چطوری میشه

مدیریت پست های وردپرس با PHP – ایجاد و به روز رسانی

مدیریت پست های وردپرس با PHP – ایجاد و به روز رسانی

همانطور که قول داده بودم، این قسمت دوم پست اول من است، ‘ایجاد پست ها و صفحات وردپرس با استفاده از PHP – آموزش 101’. در این مقاله به بررسی این خواهیم پرداخت که چگونه می‌توانیم توابع و تئوری اساسی را که در قسمت 1 مورد بحث قرار دادم گسترش دهیم تا یک کلاس PHP Wrapper قوی و در نهایت قابل اعتماد ایجاد کنیم.

مثل همیشه، من با شما همدردی می‌کنم. که به سادگی می خواهند مستقیماً به کد شیرجه بزنند. می‌توانید آن را در یکی از مخازن Github من (چسب کردن مستقیم در خود مقاله کمی طولانی بود!).

استفاده

اول از همه، مطمئن شوید که فایل class.postcontroller.php را از Github یا محتوای آن فایل را در سند PHP خود جایگذاری کرده اید. این بدون آن کار نخواهد کرد! در نیمه دوم این آموزش به کد موجود در این فایل نگاهی خواهیم انداخت.

کلاس را به صورت زیر نمونه سازی کنید؛

$Poster = new PostController;

Post Controller به این صورت عمل می کند. شما صفات پست را با استفاده از توابع مربوطه تنظیم می کنید. سپس یک پست ایجاد یا به روز می کنید. برای به روز رسانی یک پست، ابتدا باید جستجو کرده باشید و یکی را برای به روز رسانی پیدا کرده باشید. به نظر به اندازه کافی ساده است؟

تنظیم ویژگی ها

عنوان
این عنوان عنوان پست را تعیین می‌کند. هیچ HTML در اینجا مجاز نیست و حذف شده است.

$Poster->set_title( 'The Title' );

Type
این روش نوع پست صفحه را تنظیم می کند. اسلگ از نوع پست را وارد کنید، به عنوان مثال. “پست” و “صفحه”. انواع پست سفارشی پشتیبانی می شوند.

$Poster->set_type( 'page' );

محتوا
این روش محتوای پست را تنظیم می‌کند. HTML مجاز است.

$Poster->set_content( '

این پست جدید و عالی من است!

' );

نویسنده
این کار نویسنده پست را تعیین می‌کند. به سادگی شناسه نویسنده نویسنده جدید را مشخص کنید. این باید یک عدد صحیح باشد.

$Poster->set_author_id( 12);

Slug / “Name”
این مسیر URL سفارشی پست است (در صورت فعال بودن). مراقب این کار باشید، زیرا اگر راب از قبل در حال استفاده است، ممکن است باعث ایجاد برخی خطاها شود. من اعتبار سنجی را برای تلاش و اجتناب از این به هر قیمتی اضافه کرده ام. هیچ کاراکتر یا html خاصی مجاز نیست.

$Poster->set_post_slug( "new_slug" );

الگو (فقط صفحات)
این روش به شما امکان می‌دهد الگوی صفحه خود را تنظیم کنید (باید یک صفحه باشد). اگر برای نوع پست دیگری اعمال شود نادیده گرفته می شود و خطایی به آرایه خطاها اضافه می شود. قالب ورودی “php_template_name.php” خواهد بود و برای هر موضوع منحصر به فرد خواهد بود.

$Poster->set_page_template( 'fullwidth_page.php' );

State
این روش وضعیت پست را تنظیم می‌کند. گزینه‌های موجود؛
[ «پیش‌نویس» | “انتشار” | “در انتظار”| “آینده” | “خصوصی” | وضعیت ثبت سفارشی ]

$Poster->set_post_state( "pending" );

ایجاد

حداقل شرط لازم برای ایجاد یک پست داشتن مجموعه عنوان است. با استفاده از کد زیر می توانید این کار را انجام دهید؛

$Poster->set_title( "New Post" );

پس از تنظیم، به سادگی روش ایجاد را اجرا کنید.

$Poster->create();

توجه: این روش بررسی می‌کند که آیا پست دیگری با همین نام وجود دارد (فقط برای اطمینان از اینکه تکراری نمی‌شود). بنابراین یک عنوان منحصر به فرد مورد نیاز است.

جستجو

قبل از اینکه بتوانیم یک پست موجود را به روز کنیم، ابتدا باید آن را با تابع جستجو پیدا کنیم.

برای این کار از روش جستجو استفاده می کنیم.

$Poster->جستجو( 'SEARCH_BY' , 'DATA' );

این روش 2 پارامتر را می پذیرد، ویژگی برای جستجو و داده برای جستجو.

می توانید بر اساس عنوان؛

جستجو کنید

$Poster->جستجو( 'title' , 'DATA' );

می توانید با ID؛

جستجو کنید

$Poster->search( 'id' , 'DATA' );

و می توانید با slug;

جستجو کنید

$Poster->search( 'slug' , 'DATA' );

پارامتر داده یک رشته (در صورت جستجو بر اساس عنوان یا اسلاگ) یا یک عدد صحیح (در صورت جستجو با شناسه) را می پذیرد. اگر پست یا صفحه ای با پارامترهای مشخص شده یافت نشد، خطایی به آرایه $errors اضافه می شود. می توانید با کد زیر تماس بگیرید و نمایش دهید.

$error = $Poster->get_var( 'errors' );
$Poster->PrettyPrint( $error );

به روز رسانی

هنگامی که یک پست پیدا شد، می توانید ویژگی های جدیدی به آن اختصاص دهید. پس از تنظیم ویژگی ها، به سادگی روش به روز رسانی را فراخوانی کنید.

$Poster->update();

به عنوان مثال، اگر می خواهید عنوان پست 1 را تغییر دهید (ID = 1)، از کد زیر استفاده کنید.

$Poster->search( 'id', 1 );
$Poster->set_title( 'عنوان جدید' );
$Poster->update();

همه ویژگی ها را می توان از این طریق به روز کرد.

بازیابی متغیرها

برای بازیابی متغیرهای تعریف شده می توانید از روش get_vars استفاده کنید.

$Poster->get_var( 'title' );    // عنوان را برمی گرداند (اگر آن را تنظیم کرده باشید)
$Poster->get_var( 'type' );     // نوع پست را برمی گرداند (اگر آن را تنظیم کرده باشید)
$Poster->get_var( 'content' );  // محتوا را برمی گرداند (اگر آن را تنظیم کرده باشید)
$Poster->get_var( 'category' ); // دسته را به صورت آرایه برمی گرداند (در صورت تنظیم)
$Poster->get_var( 'template' ); // الگو را برمی گرداند (اگر آن را تنظیم کرده باشید)
$Poster->get_var( 'slug' );     // Slug را برمی گرداند (اگر آن را تنظیم کرده باشید)
$Poster->get_var( 'auth_id' );  // شناسه نویسنده را برمی‌گرداند (اگر آن را تنظیم کرده باشید)
$Poster->get_var( 'وضعیت' );   // وضعیت پست را برمی‌گرداند (اگر آن را تنظیم کرده باشید)
$Poster->get_var( 'errors' );   // آرایه خطاها را برمی گرداند

/** پس از ایجاد یک پست یا جستجوی موفقیت آمیز یکی، می توانید از این پست ها استفاده کنید **/

	// یک شی PHP پست را برمی گرداند. این می تواند برای بررسی موفقیت آمیز بودن روش جستجو استفاده شود
	$Poster->get_var( 'current_post' );

	// شناسه پست انتخابی (عدد صحیح) را برمی گرداند.
	$Poster->get_var( 'current_post_id' );

	// پیوند ثابت URL پست انتخاب شده را برمی گرداند
	$Poster->get_var( 'current_post_permalink' );

همین است! اگر در مورد استفاده سوالی دارید می توانید در نظرات اینجا از من بپرسید. اگر اشکالی پیدا کردید، لطفاً در Github< به من بگویید. /a>.

برای قسمت دوم آماده هستید؟

ساخت کلاس: راهنمای گام به گام

اکنون نحوه استفاده از کلاس را دیدیم، اجازه دهید به ابتدا برگردیم.
کلاس ما PostController نامیده می‌شود. ;

class PostController {

. . . توابع کلاس به اینجا بروید. . .

}

برای کسانی از شما که با کلاس‌های PHP آشنا نیستید، کلاس به عنوان یک شی تعریف می‌شود که شامل مجموعه‌ای از توابع و متغیرهایی است که با هم کار می‌کنند. معرفی PHP.net جزئیات بیشتر در مورد نحو و نظریه ای که برای ایجاد چارچوب خود استفاده خواهیم کرد. بعدی در لیست کارهای ما این است که همه متغیرهایی را که استفاده خواهیم کرد، اعلام کنیم.

// متغیرهای داده پست
عمومی $PC_title;
عمومی $PC_type;
عمومی $PC_content;
عمومی $PC_category;
عمومی $PC_template;
عمومی $PC_slug;
عمومی $PC_auth_id;
public $PC_status = "انتشار";

// متغیرهای برای ارسال به روز رسانی
عمومی $PC_current_post;
عمومی $PC_current_post_id;
عمومی $PC_current_post_permalink;

// آرایه خطا
عمومی $PC_errors؛

بسیار خوب، پس بیایید این را به سه بلوک تقسیم کنیم. بلوک اول اطلاعات ارسالی را که شما مشخص کرده‌اید نگه می‌دارد. این داده هایی خواهد بود که برای به روز رسانی و ایجاد یک پست (وقتی به آن رسیدیم) استفاده می شود. اگرچه احتمالاً می‌توانید با نام متغیرها حدس بزنید، در اینجا فهرستی از داده‌هایی است که می‌خواهیم ذخیره کنیم.

  1. عنوان
  2. تایپ (صفحه/پست و غیره)
  3. محتوا
  4. دسته/دسته ها
  5. الگوی صفحه
  6. اسلگ
  7. شناسه نویسنده و
  8. وضعیت پست (مثلاً منتشر شده/پیش‌نویس)

بلوک دوم داده‌های واقعی پست وردپرس را که عبارت جستجوی ما برمی‌گرداند (یا داده‌های مربوط به یک پست ایجاد شده پس از ایجاد آن) را نگه می‌دارد. متغیر «$PC_current_post» یک شی از کل پست را نگه می‌دارد. این همه داده های مربوط به پست، از جمله (مهمتر) داده های ذکر شده در بالا را در خود نگه می دارد. به طور مشابه، متغیرهای Post ID و Permalink آن داده‌های مربوط به پست موجود را نگه می‌دارند.

بلاک سوم و آخر فقط یک متغیر دارد: آرایه خطاها. اگر مشکلی در یک نقطه “نیز” شناخته شده مواجه شد، پیامی در مورد مشکل برای مرجع شما به این آرایه اضافه می شود. لطفاً توجه داشته باشید که من “PC_” را فقط از روی عادت خوب وارد کرده ام: نام متغیرها هرگز نباید مبهم باشد. PC مخفف “PostController” است. اگر این را تغییر دادید به یاد داشته باشید که پیشوند تابع get_var() را نیز تغییر دهید.

درست، اکنون که همه چیز را تنظیم کردیم، بیایید به اولین عملکرد خود بپردازیم.

// توابع ایجاد
تابع عمومی create() {

	if ( isset( $this->PC_title ) ) {

		if ($this->PC_type == 'page') {
			$post = get_page_by_title( $this->PC_title, 'OBJECT', $this->PC_type );
		}دیگر {
			$post = get_page_by_title($this->PC_title, 'OBJECT', $this->PC_type );
		}

		$post_data = آرایه(
			'post_title' => wp_strip_all_tags($this->PC_title)،
			'post_name' => $this->PC_slug،
			'post_content' => $this->PC_content،
			'post_status' => $this->PC_status،
			'post_type' => $this->PC_type،
			'post_author' => $this->PC_auth_id،
			'post_category' => $this->PC_category،
			'page_template' => $this->PC_template
		)

		if ( ! isset( $post ) ) {
			$this->PC_current_post_id = wp_insert_post( $post_data, $error_obj );
			$this->PC_current_post = get_post( ( عدد صحیح ) $this->PC_current_post_id, 'OBJECT' );
			$this->PC_current_post_permalink = get_permalink( ( عدد صحیح ) $this->PC_current_post_id );
			بازگشت $error_obj;
		}دیگر {
			$this->update();
			$this->errors[] = 'آن صفحه از قبل وجود دارد. به جای آن به‌روزرسانی را امتحان کنید. کنترل به تابع update() منتقل شد.';
			بازگشت FALSE;
		}

	}دیگر {
		$this->errors[] = 'عنوان تنظیم نشده است.';
		بازگشت FALSE;
	}
}

برای کسانی از شما که قسمت 1 این مجموعه را خوانده اید: ایجاد پست ها و صفحات وردپرس با استفاده از PHP – یک آموزش 101، این تابع برای شما آشنا به نظر می رسد. این صرفاً عملکرد تمام شده آن آموزش پس از انطباق با این تنظیم جدید است. برای خواندن توضیح این تابع خاص، توصیه می کنم قسمت 1 را بررسی کنید. تنها تفاوت عمده با خود تابع این است که به جای اضافه کردن تابع به سر وردپرس، بلافاصله اجرا می شود.

به عنوان یک اجرای سریع، تابع بررسی می کند که عنوانی تنظیم شده باشد (این حداقل نیاز برای ایجاد پست است). سپس یک پست موجود (بر اساس عنوان) را بررسی می کند. اگر پستی پیدا شد، پیامی به آرایه خطاها اضافه می شود و کنترل به تابع update() ارسال می شود. اگر پستی با این عنوان پیدا نشد، از $post_data برای ایجاد یک پست جدید استفاده می‌شود. متغیر Current Post (و همچنین 2 متغیر داده دیگر) برای نگهداری داده های این پست جدید به روز می شوند. این برای بررسی پستی که به تازگی ایجاد کرده اید خوب است. اگر مشکلی وجود دارد، پیامی به آرایه $errors اضافه می‌شود.

ببخشید اگر کمی سریع بود: اگر کمی گیج هستید، توصیه می کنم مقاله 101 من را در این مورد بررسی کنید.

برای همه شما که هنوز با من هستید، بیایید ادامه دهیم.

// تنظیم عنوان پست
تابع عمومی set_title ( $name ) {
	$this->PC_title = $name;
	بازگشت $this->PC_title;
}

// نوع پست را تنظیم کنید
تابع عمومی set_type ( $type ) {
	$this->PC_type = $type;
	بازگشت $this->PC_type;
}

// محتوای پست را تنظیم کنید
تابع عمومی set_content ( $content ) {
	$this->PC_content = $content;
	بازگشت $this->PC_content;
}

// شناسه نویسنده پست را تنظیم کنید
تابع عمومی set_author_id ( $auth_id ) {
	$this->PC_auth_id = $auth_id;
	بازگشت $this->PC_auth_id;
}

// وضعیت پست را تنظیم کنید
تابع عمومی set_post_state ( $content ) {
	$this->PC_status = $content;
	بازگشت $this->PC_status;
} 

این بیت بسیار ساده است. توابع create() و update() هر دو از متغیرهای محلی به عنوان منبع داده خود استفاده می کنند. بنابراین ما به راهی برای تنظیم این داده ها نیاز داریم. 5 متغیر اول همانطور که در بالا مشاهده می کنید تنظیم شده اند. می‌شنوم که می‌پرسید: «در مورد 3 تای دیگر چطور؟» نگران نباشید، آنها اینجا هستند، اما خواهید دید که مقداری اعتبار برای تأیید ورودی های آنها (برای به حداکثر رساندن قابلیت اطمینان) وجود دارد.

// SET POST SLUG
تابع عمومی set_post_slug( $slug ) {

	$args = آرایه ('name' => $slug);
	$posts_query = get_posts( $args );

	if ( ! get_posts( $args ) && ! get_page_by_path( $this->PC_slug ) ) {

		$this->PC_slug = $slug;
		بازگشت $this->PC_slug;

	}دیگر {
		$this->errors[] = 'Slug در حال حاضر در حال استفاده است.';
		بازگشت FALSE;
	}

}

// SET PAGE TEMPLATE
تابع عمومی set_page_template ( $content ) {

	if ($this->PC_type == 'page') {
		$this->PC_template = $content;
		بازگشت $this->PC_template;
	}دیگر {
		$this->errors[] = 'شما فقط می توانید از الگو برای صفحات استفاده کنید.';
		بازگشت FALSE;
	}

}

// شناسه‌های دسته‌بندی را به آرایه دسته‌بندی‌ها اضافه کنید
تابع عمومی add_category($IDs){

	if ( is_array ($IDs ) ) {
		foreach ($IDs به عنوان $id) {
			if ( is_int( $id ) ) {
				$this->PC_category[] = $id;
			}دیگر {
				$this->errors[] = '' .$id . ' یک ورودی عدد صحیح معتبر نیست.';
				بازگشت FALSE;
			}
		}
	}دیگر {
		$this->errors[] = 'ورودی در یک آرایه معتبر مشخص نشده است.';
		بازگشت FALSE;

	}

}

این سه مورد آخر کمی پیچیده‌تر هستند، اما برای جلوگیری از خطاهای وحشتناک بسیار مهم هستند.

set_post_slug()

تابع set_post_slug() چیزی است که باید در آن بسیار مراقب باشید. پست اسلاگ اساساً رشته ای است که به انتهای URL پایه برای ایجاد آدرس فردی پست اضافه می شود. این همچنین به عنوان یک شناسه اساسی پست توسط وردپرس استفاده می شود. به عنوان مثال. حلزون این پست “manage-wordpress-posts-php-create-update” است. این به انتهای URL اصلی، https://wpexplorer.com/ اضافه می شود تا URL منحصر به فرد این مقاله ایجاد شود: https://www.wpexplorer.com/manage- wordpress-posts-php-create-update/. من مطمئن هستم که می توانید تصور کنید که اگر بیش از یک پست دارای همان اسلگ (و از این رو URL) باشد، با چه مشکلاتی مواجه خواهید شد. این یک آشفتگی واقعاً ناخوشایند است که در صورت امکان بهتر است از آن اجتناب شود.

Post Slug باید منحصر به فرد باشد

این دلیل تأیید اعتبار است. اتفاقی که می افتد این است که تابع پست هایی را با اسلاگ مشخص شده جستجو می کند. اگر هیچکدام یافت نشد و هیچ صفحه ای با آن به عنوان مسیر وجود ندارد (در اصل مشابه Slug در این زمینه)، عالی است! متغیر را تنظیم کنید. در غیر این صورت، خطایی به آرایه $errors اضافه می‌شود و متغیر تنظیم نشده است (این تابع یک Boolean FALSE برمی‌گرداند).

set_page_template() & add_category()

set_page_template() یک الگوی صفحه (به شکل my_page_template.php) را به یک صفحه و فقط یک صفحه اختصاص می‌دهد. اعتبارسنجی در اینجا به سادگی بررسی می کند که آیا نوع پست روی “صفحه” تنظیم شده است یا خیر. اگر درست است، داده ها را ذخیره کنید. اگر نه، زحمت ندهید.

add_category() به شما امکان می‌دهد آرایه‌ای از اعداد صحیح را به دسته‌های پست اضافه کنید (هنوز باید در یک آرایه باشد، حتی اگر فقط ۱ عدد اضافه کنید). اعداد صحیح نشان دهنده شناسه دسته ها هستند. اعتبارسنجی به سادگی از طریق آرایه ای که شما مشخص کرده اید حلقه می زند و بررسی می کند که هر سلول دارای یک مقدار صحیح باشد. اگر سلول دارای مقدار صحیح باشد، به آرایه دسته های اصلی اضافه می شود. اگر نه، نادیده گرفته می شود و یک خطا به آرایه خطاها اضافه می شود. درخشان! اکنون می‌توانیم تمام متغیرهای مورد نیاز خود را اختصاص دهیم.

جستجو

در ابتدای این آموزش گفتیم که می خواهیم سیستمی بسازیم که قابلیت به روز رسانی پست های موجود وردپرس را داشته باشد. برای اینکه این کار امکان پذیر باشد، ابتدا باید پستی را که می خواهیم ویرایش کنیم، پیدا کنیم. برای این کار از تابع search() استفاده خواهیم کرد.

// جستجوی تابع Post
جستجوی تابع عمومی ($by، $data ) {

	سوئیچ ($by ) {

	// جستجوی پست با استفاده از شناسه آن
	مورد 'id':
	
		if ( is_integer ( $data ) && get_post ( ( عدد صحیح ) $data ) !== NULL ) {
			$this->PC_current_post = get_post( ( عدد صحیح ) $data, 'OBJECT' );
			$this->PC_current_post_id = ( عدد صحیح ) $data;
			$this->PC_current_post_permalink = get_permalink( ((عدد صحیح) $data );
			بازگشت TRUE;
		}دیگر {
			$this->errors[] = 'هیچ پستی با آن شناسه یافت نشد.';
			بازگشت FALSE;
		}

	زنگ تفريح؛

	"عنوان" مورد:

		$post = get_page_by_title( $data );

		if ( ! $post ) {
			$post = get_page_by_title( $data, OBJECT, 'post' );
		}

		$id = $post->ID;

		if ( is_integer($id) && get_post( ((عدد صحیح)$id) !== NULL ) {
			$this->PC_current_post = get_post( ((عدد صحیح)$id, 'OBJECT' );
			$this->PC_current_post_id = (عدد صحیح) $id;
			$this->PC_current_post_permalink = get_permalink( ((عدد صحیح) $id );
			بازگشت TRUE;
		}دیگر {
			$this->errors[] = 'هیچ پستی با آن عنوان یافت نشد.';
			بازگشت FALSE;
		}

		زنگ تفريح؛

		// جستجوی پست با استفاده از IT'S SLUG
		مورد 'slug':
		$args = آرایه(
			'name' => $data,
			'max_num_posts' => 1
		)
		$posts_query = get_posts( $args );
		if ($posts_query ) {
			$id = $posts_query[0]->ID;
		}دیگر {
			$this->errors[] = 'هیچ پستی با آن اسلگ یافت نشد.';
		}

		if ( is_integer($id) && get_post( ((عدد صحیح)$id) !== NULL ) {
			$this->PC_current_post = get_post( ((عدد صحیح)$id, 'OBJECT' );
			$this->PC_current_post_id = (عدد صحیح)$id;
			$this->PC_current_post_permalink = get_permalink((عدد صحیح)$id);
			بازگشت TRUE;
		}دیگر {
			$this->errors[] = 'هیچ پستی با آن اسلگ یافت نشد.';
			بازگشت FALSE;
		}

		زنگ تفريح؛

		پیش فرض:

		$this->errors[] = 'هیچ پستی یافت نشد.';
		بازگشت FALSE;

		زنگ تفريح؛

	}
}

این تابع search() است. من از دستور PHP Switch استفاده می کنم (شکل متفاوتی از دستورات IF که در این مورد کارآمدتر از چندین If تو در تو خواهد بود. در راهنمای PHP.net search() تابع 2 پارامتر را می پذیرد؛

1. مقدار «جستجو براساس»
2. داده های جستجو برای

از کد بالا می توانید ببینید که 3 گزینه “جستجو بر اساس” وجود دارد. «id»، «عنوان» و «slug». بیایید هر کدام را کمی دقیق‌تر بررسی کنیم.

جستجو بر اساس شناسه

این ساده‌ترین روش جستجو است و فقط باید شناسه عدد صحیح پست را بدانید. اگر داده‌های مشخص‌شده یک عدد صحیح باشد، تابع یک پرس و جو به پایگاه داده وردپرس شما ارسال می‌کند (با استفاده از تابع get_post() داخلی). اگر پستی با آن عدد صحیح وجود داشته باشد، آنگاه شی پست در متغیر PC_current_post (و همچنین شناسه و پیوند دائمی که ذخیره می‌شوند) برگردانده و ذخیره می‌شود. ساده!

جستجو بر اساس عنوان

فکر نمی‌کنم این واقعاً نیاز به توضیح زیادی داشته باشد: تقریباً مانند جستجو با شناسه است، اما در عوض پست را با عنوان آن جستجو می‌کند. اگر پست‌ها/صفحه‌هایی دارید که نام یکسانی دارند (چیزی که من توصیه نمی‌کنم)، پست با کوچک‌ترین شناسه انتخاب می‌شود. اگر می‌دانید که پست‌هایی با نام‌های مشابه دارید، برای جلوگیری از سردرگمی از این روش استفاده نکنید. لطفاً توجه داشته باشید: این کد را خواهید دید؛

$post = get_page_by_title( $data );

if ( ! $post ) {
	$post = get_page_by_title( $data, OBJECT, 'post' );
}

دلیل اینکه مجبوریم این کار را انجام دهیم این است که اگرچه get_page_by_title() می‌تواند داده‌ها را هم برای پست‌ها و هم برای صفحات برگرداند، فقط صفحات را برمی‌گرداند مگر اینکه پارامتر سوم به عنوان “پست” مشخص شود.< /p>

منظورم این نیست که چیز بدیهی را بیان کنم، اما توجه داشته باشید که اگر همزمان با عنوان جستجو می کنید و عنوان را تغییر می دهید، کد فقط یک بار (بار اول) می تواند اجرا شود. پس از آن خطای 404 Not Found را برمی‌گرداند.

جستجو بر اساس Slug

این یک روش خوب و قابل اعتماد برای یافتن پست ها است. نباید هیچ ابهامی وجود داشته باشد زیرا همانطور که قبلاً گفتم راب باید منحصر به فرد باشد. اگر منظور من از “Slug” را نمی دانید، بخش SET_POST_SLUG() را بررسی کنید. برای انجام این کار، ما به سادگی نیاز به اجرای پرس و جوی پست های وردپرس برای یافتن پست هایی با اسلاگ خاص داشتیم. می‌توانیم شناسه را از این متد بازیابی کنیم و متغیرهای پست فعلی را مانند 2 روش دیگر تنظیم کنیم. همانند Searching by Title، جستجو و تغییر Slug با هم مشکلاتی را ایجاد می کند. مراقب باشید!

به روز رسانی و مدیریت

درست است! اکنون که امکان جستجو وجود ندارد، می‌توانیم به عملکرد واقعی update() برویم.

// به‌روزرسانی پست
به روز رسانی تابع عمومی(){
	if ( isset($this->PC_current_post_id ) ) {

		// شناسه پست را برای به روز رسانی اعلام کنید
		$PC_post['ID'] = $this->PC_current_post_id;

		// محتوا/پارامترهای پست را برای به روز رسانی اعلام کنید
		if ( isset($this->PC_title ) && $this->PC_title !== $this->PC_current_post->post_title ) {
			$PC_post['post_title'] = $this->PC_title;
		}

		if ( isset( $this->PC_type ) && $this->PC_type !== $this->PC_current_post->post_type ) {
			$PC_post['post_type'] = $this->PC_type;
		}

		if ( isset($this->PC_auth_id) && $this->PC_auth_id !== $this->PC_current_post->post_type ) {
			$PC_post['post_author'] = $this->PC_auth_id;
		}

		if ( isset($this->PC_status) && $this->PC_status !== $this->PC_current_post->post_status ) {
			$PC_post['post_status'] = $this->PC_status;
		}

		if ( isset($this->PC_category) && $this->PC_category !== $this->PC_current_post->post_category ) {
			$PC_post['post_category'] = $this->PC_category;
		}

		if ( isset($this->PC_template )
			&&$this->PC_template !== $this->PC_current_post->page_template
			&& ($PC_post['post_type'] == 'صفحه' || $this->PC_current_post->post_type == 'صفحه' )
		) {
			PC_post['page_template'] = $this->PC_template;
		}

		if ( isset( $this->PC_slug ) && $this->PC_slug !== $this->PC_current_post->post_name ) {
			$args = آرایه ('name' => $this->PC_slug);
		}

		if ( ! get_posts( $args ) && !get_page_by_path( $this->PC_slug ) ) {
			$PC_post['post_name'] = $this->PC_slug;
		}دیگر {
			$errors[] = 'Slug Defined منحصر به فرد نیست';
		}

		if ( isset($this->PC_content) && $this->PC_content !== $this->PC_status->post_content ) {
			$PC_post['post_content'] = $this->PC_content;
		}

		wp_update_post($PC_post );

	}

	return($errors );
}

من قصد ندارم دروغ بگویم، این بیت واقعاً بسیار آسان است. اساساً، عملکرد به روز رسانی بررسی می کند که آیا هر یک از 8 پارامتر پست تنظیم شده است یا خیر. اگر چنین است، آرایه ای را ایجاد و پر می کند که با wp_update_post() سازگار است. wp_update_post() را اجرا می کند و هی از قبل! آفرین. برای کارایی، قبل از اختصاص هر متغیر، یک بررسی ساده اضافه می کنیم. فقط در صورتی به روز می شود که تغییر کرده باشد. اگرچه من کمی جانبدارانه هستم، باید اعتراف کنم که این کد زیباست!

مقادیر تنظیم شده با مقادیر بازگردانده شده توسط خود وردپرس مقایسه می شوند. در این صورت فقط یک مقایسه ساده لازم است. متوجه خواهید شد که دستورهای template و IF کمی اعتبار بیشتری نسبت به بقیه دارند. اگرچه ما قبلاً اعتبارسنجی برای فیلتر کردن خطاها برای این موارد اضافه کرده‌ایم، بررسی مضاعف ضرری ندارد! بررسی الگوی صفحه (بررسی می‌کند تا ببیند نوع پست روی صفحه تنظیم شده است یا خیر) صرفاً به این دلیل است که تلاش برای تنظیم یک الگوی صفحه برای یک غیرپست یک مشکل من است. متاسفم بابت زیاده روی! از طرف دیگر بررسی اسلاگ یک مورد مهم است! شما واقعاً نمی‌خواهید درگیری‌های حلزونی داشته باشید. در این مورد چیزی به نام زیاده روی وجود ندارد. این تقریباً برای update() است. در نهایت، ما چند توابع عمومی مفید داریم.

عملکردهای اضافی

اکنون که بخش عمده ای از کلاس نوشته شده است، همیشه ایده خوبی است که چند عملکرد مفید/صرفه جویی در زمان اضافه کنید. نگاهی بیندازید؛

// توابع عمومی
تابع عمومی get_content() {

	if ( isset( $this->PC_current_post->post_content ) ) {
		بازگشت $this->PC_current_post->post_content;
	}

}

تابع عمومی get_var ( $name ) {
	$name = 'PC_'.$name;
	if ( isset( $this->$name ) ) {
		بازگشت $this->$name;
	}
}

تابع عمومی unset_all() {
	foreach ( get_class_vars(get_class($this)) به عنوان $name => $default ) {
		$this->$name = $default;
	}
}

تابع عمومی __toString() {
	return 'از تابع PrettyPrint برای برگرداندن محتویات این شیء استفاده کنید. به عنوان مثال;
$my_post->PrettyPrintAll();

';
}

عملکرد عمومی PrettyPrint($data) {
echo "

";
	print_r($data);
	پژواک "

";
}

تابع عمومی () PrettyPrintAll {
echo "

";
	print_r($this);
	پژواک "

";

}

توضیحات سریع؛

  • get_content() : این تابع محتوای پستی را که جستجو کرده اید برمی گرداند (این توسط وردپرس ارائه شده است و توسط شما تنظیم نشده است). این هیچ پارامتری را نمی پذیرد.
  • get_var( ‘var_name’ ) : گاهی اوقات وقتی داده های زیادی تنظیم کرده اید ممکن است گیج کننده باشد. این یک پارامتر را می پذیرد: رشته ای از نام متغیری که می خواهید. در اینجا لیستی از ‘var_name’s;
  • موجود است

  • «عنوان» – عنوان پستی که تنظیم کرده‌اید.
  • ‘type’ – نوع پستی که تنظیم کرده اید.
  • «محتوا» – محتوایی که تنظیم کرده‌اید.
  • «دسته» – دسته‌هایی که تنظیم کرده‌اید (آرایه برمی‌گرداند).
  • “الگو” – الگوی صفحه ای که تنظیم کرده اید.
  • ‘slug’ – Slug که شما تنظیم کرده اید.
  • “auth_id” – شناسه نویسنده ای که تنظیم کرده اید.
  • “وضعیت” – وضعیت پستی که تنظیم کرده اید.
  • “current_post” – WP Post Object پس از جستجو برگشت.
  • «current_post_id» – شناسه پست WP پس از جستجو برگشت.
  • «current_post_permalink» – پیوند ثابت WP Post پس از جستجو برگشت.
  • ‘errors’ – Errors Array (بسیار مفید).
  • unset_all() : هیچ پارامتری وجود ندارد. یک شغل تمام داده های ذخیره شده در نمونه کلاس را حذف می کند. مراقب باشید.
  • __toString() : این چیزی است که وقتی نمونه خود کلاس چاپ می شود اجرا می شود. پیام خطا چاپ شد. از Use PrettyPrintAll()
  • استفاده کنید

// شروع کلاس جدید
$Poster = new PostController();

// پیام خطا را بازتاب می دهد
echo $Poster;
  • PrettyPrint(): این فقط یک تابع مفید است که اشیا و آرایه‌ها را به خوبی در تگ‌های “pre” نمایش می‌دهد. یک پارامتر را می‌گیرد: داده‌ها «PrettyPrinted» شوند.
  • PrettyPrintAll(): این همان PrettyPrint() است، به جز «PrettyPrints» کل نمونه کلاس (شامل همه متغیرها).

و این یک بسته بندی است!

از اینکه مقاله من را خواندید متشکرم: امیدوارم هم مفید و هم روشنگر بوده باشید!

شما می توانید آخرین نسخه کلاس PostController را در Github پیدا کنید: PostController. اگر از این آموزش لذت بردید، لطفا به اشتراک بگذارید! (اشاره کردن نیز بسیار اشتباه است: @harribellthomas 😉). اگر سؤالی دارید، آنها را در بخش نظرات زیر مطرح کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا